/**
 * 
 */
package br.com.skynix.tcmc.base.spring;

import java.util.List;

import org.primefaces.model.SortOrder;

import br.com.skynix.tcmc.base.model.EntidadeAuditavel;
import br.com.skynix.tcmc.model.rh.Empresa;

/**
 * @author mgrb
 * 
 */
public interface IServiceAuditavel<T extends EntidadeAuditavel> {

	T buscarPelaChave(Long id);

	void alterar(T entidade);

	Long inserir(T entidade);

	void excluir(T entidade);

	List<T> listarTodos(Empresa empresa);

	/**
	 * @param id
	 * @return
	 */
	Integer getVersaoAtual(Long id);

	List<T> buscarPeloExemplo(T entidadeExemplo);

	/**
	 * 
	 */
	List<T> listarTodos();

	/**
	 * @param modelo
	 * @param first
	 * @param pageSize
	 * @param sortField
	 * @param sortOrder
	 * @return
	 */
	List<T> buscarPeloExemplo(T modelo, int first, int pageSize,
			String sortField, SortOrder sortOrder);

	/**
	 * @param modelo
	 * @return
	 */
	int getQuantidadeRegistros(T modelo);
}
